package io.spring.boot.sample.web.dustjs; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.script.ScriptTemplateConfigurer; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @author chanwook */ @Configuration public class ScriptTemplateConfiguration extends WebMvcConfigurerAdapter { @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.scriptTemplate().prefix("/static/templates/").suffix(".html"); } @Bean public ScriptTemplateConfigurer scriptTemplateConfigurer() throws IOException { final ScriptTemplateConfigurer configurer = new ScriptTemplateConfigurer(); configurer.setRenderFunction("render"); configurer.setSharedEngine(true); ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); configurer.setEngine(engine); addScripts(configurer); return configurer; } private void addScripts(ScriptTemplateConfigurer configurer) throws IOException { List<String> scripts = new ArrayList<>(); scripts.add("/static/dust.js"); scripts.add("/static/polyfill.js"); scripts.add("/META-INF/resources/webjars/dustjs-linkedin/2.7.2/dust-full.js"); // TODO we needs refactoring if add STV.setScripts("folder") final ClassPathResource dir = new ClassPathResource("/static/templates/compiled"); for (File f : dir.getFile().listFiles()) { scripts.add("/static/templates/compiled/" + f.getName()); } configurer.setScripts(scripts.toArray(new String[scripts.size()])); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!registry.hasMappingForPattern("/static/templates/**")) { registry.addResourceHandler("/static/templates/**").addResourceLocations("classpath:/static/templates/"); } } }